package com.tianya.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 非静态写法（推荐）：通过 Spring 管理实例，避免静态注入问题
 */
@Component
@RequiredArgsConstructor // 自动生成构造函数注入
public class JwtUtil {

    private static long expirationTime = 86400000L;
    public static String generateToken(Long userId) {
            // 使用 Keys 类生成安全的密钥
        byte[] secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS512).getEncoded();
        Date now = new Date();
        Date expiration = new Date(now.getTime() + expirationTime);
        return Jwts.builder()
                    .setSubject(String.valueOf(userId))
                    .setIssuedAt(now)
                    .setExpiration(expiration)
                    .signWith(SignatureAlgorithm.HS512, secretKey)
                    .compact();
    }

    public static Claims parseToken(String token) {
        // 使用相同的密钥解析 Token
        byte[] secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS512).getEncoded();
        return Jwts.parser()
                    .setSigningKey(secretKey)
                    .parseClaimsJws(token)
                    .getBody();
    }

    public static Long getUserIdFromToken(String token) {
        Claims claims = parseToken(token);
        return Long.valueOf(claims.getSubject());
    }
}